#include "gtkbuilderlistitemfactory.h"
#include "gtkbuilder.h"
+#include "gtkbuilderprivate.h"
#include "gtkintl.h"
#include "gtklistitemfactoryprivate.h"
#include "gtklistitemprivate.h"
GtkBuilderScope *scope;
GBytes *bytes;
+ GBytes *data;
char *resource;
};
if (self->scope)
gtk_builder_set_scope (builder, self->scope);
- if (!gtk_builder_extend_with_template (builder, G_OBJECT (list_item), G_OBJECT_TYPE (list_item),
- (const gchar *)g_bytes_get_data (self->bytes, NULL),
- g_bytes_get_size (self->bytes),
- &error))
+ if (!gtk_builder_extend_with_template (builder, G_OBJECT (list_item), G_OBJECT_TYPE (list_item),
+ (const char *)g_bytes_get_data (self->data, NULL),
+ g_bytes_get_size (self->data),
+ &error))
{
g_critical ("Error building template for list item: %s", error->message);
g_error_free (error);
}
self->bytes = g_bytes_ref (bytes);
+
+ if (!_gtk_buildable_parser_is_precompiled (g_bytes_get_data (bytes, NULL), g_bytes_get_size (bytes)))
+ {
+ GError *error = NULL;
+ GBytes *data;
+
+ data = _gtk_buildable_parser_precompile (g_bytes_get_data (bytes, NULL),
+ g_bytes_get_size (bytes),
+ &error);
+ if (data == NULL)
+ {
+ g_warning ("Failed to precompile template for GtkBuilderListItemFactory: %s", error->message);
+ g_error_free (error);
+ self->data = g_bytes_ref (bytes);
+ }
+ else
+ {
+ self->data = data;
+ }
+ }
+
return TRUE;
}
g_clear_object (&self->scope);
g_bytes_unref (self->bytes);
+ g_bytes_unref (self->data);
g_free (self->resource);
G_OBJECT_CLASS (gtk_builder_list_item_factory_parent_class)->finalize (object);